  (function($){
    	$.getUrlParam=function(name){
    		var reg=new RegExp("(^|&)"+name+"=([^&]*)(&|$)");
    		var r =window.location.search.substr(1).match(reg);
    		if(r!=null)return unescape(r[2]);
    		return null;
    	}
    })(jQuery);
  
  (function($){

	    $.session = {

	        _id: null,

	        _cookieCache: undefined,

	        _init: function()
	        {
	            if (!window.name) {
	                window.name = Math.random();
	            }
	            this._id = window.name;
	            this._initCache();

	            // See if we've changed protcols

	            var matches = (new RegExp(this._generatePrefix() + "=([^;]+);")).exec(document.cookie);
	            if (matches && document.location.protocol !== matches[1]) {
	               this._clearSession();
	               for (var key in this._cookieCache) {
	                   try {
	                   window.sessionStorage.setItem(key, this._cookieCache[key]);
	                   } catch (e) {};
	               }
	            }

	            document.cookie = this._generatePrefix() + "=" + document.location.protocol + ';path=/;expires=' + (new Date((new Date).getTime() + 120000)).toUTCString();

	        },

	        _generatePrefix: function()
	        {
	            return '__session:' + this._id + ':';
	        },

	        _initCache: function()
	        {
	            var cookies = document.cookie.split(';');
	            this._cookieCache = {};
	            for (var i in cookies) {
	                var kv = cookies[i].split('=');
	                if ((new RegExp(this._generatePrefix() + '.+')).test(kv[0]) && kv[1]) {
	                    this._cookieCache[kv[0].split(':', 3)[2]] = kv[1];
	                }
	            }
	        },

	        _setFallback: function(key, value, onceOnly)
	        {
	            var cookie = this._generatePrefix() + key + "=" + value + "; path=/";
	            if (onceOnly) {
	                cookie += "; expires=" + (new Date(Date.now() + 120000)).toUTCString();
	            }
	            document.cookie = cookie;
	            this._cookieCache[key] = value;
	            return this;
	        },

	        _getFallback: function(key)
	        {
	            if (!this._cookieCache) {
	                this._initCache();
	            }
	            return this._cookieCache[key];
	        },

	        _clearFallback: function()
	        {
	            for (var i in this._cookieCache) {
	                document.cookie = this._generatePrefix() + i + '=; path=/; expires=Thu, 01 Jan 1970 00:00:01 GMT;';
	            }
	            this._cookieCache = {};
	        },

	        _deleteFallback: function(key)
	        {
	            document.cookie = this._generatePrefix() + key + '=; path=/; expires=Thu, 01 Jan 1970 00:00:01 GMT;';
	            delete this._cookieCache[key];
	        },

	        get: function(key)
	        {
	            return window.sessionStorage.getItem(key) || this._getFallback(key);
	        },

	        set: function(key, value, onceOnly)
	        {
	            try {
	                window.sessionStorage.setItem(key, value);
	            } catch (e) {}
	            this._setFallback(key, value, onceOnly || false);
	            return this;
	        },
	        
	        'delete': function(key){
	            return this.remove(key);
	        },

	        remove: function(key)
	        {
	            try {
	            window.sessionStorage.removeItem(key);
	            } catch (e) {};
	            this._deleteFallback(key);
	            return this;
	        },

	        _clearSession: function()
	        {
	          try {
	                window.sessionStorage.clear();
	            } catch (e) {
	                for (var i in window.sessionStorage) {
	                    window.sessionStorage.removeItem(i);
	                }
	            }
	        },

	        clear: function()
	        {
	            this._clearSession();
	            this._clearFallback();
	            return this;
	        }

	    };

	    $.session._init();

	})(jQuery);